#ifndef __LIST_H_
#define __LIST_H_

#include "myTypes.h"
#include <stdbool.h>
#include <stdio.h>

// 设计链表的节点
typedef struct Node
{
    // 数据域
    DataType_t Data ;
    
    // 指针域
    struct Node *Next  , *Prev ;
}Node_t , *P_Node_t ;


/// @brief 遍历显示链表
/// @param head 需要遍历的链表头
/// @param print 打印器地址
void DisplayList( P_Node_t head , PrintFunc_t print);

/// @brief 初始化一个新的结点
/// @param NewData 该结点中的数据内容，NULL表示无需填入数据
/// @return 成功返回新结点
P_Node_t InitNewNode( DataType_t * NewData );


/// @brief 把新结点添加到链表中
/// @param Prev 新结点的前驱结点
/// @param New  新结点
/// @param Next 新结点的后继结点
void Add2List( P_Node_t Prev  , P_Node_t New  , P_Node_t Next );



/// @brief 把新结点有序插入到链表
/// @param head  具体的链表头
/// @param NewNode 需要添加的新结点
/// @param cmp 比较器，如何判断新结点与链表结点的大小关系
void OrderIns( P_Node_t head , P_Node_t NewNode , CmpFunc_t cmp );



#endif